#ifndef __________MOTOR_ADC_H__________
#define __________MOTOR_ADC_H__________

#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

#include "stm32f1xx_hal.h"
#include "adc.h"
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

typedef enum motor_adc_channel_t
{
    MOTOR_ADC_CHANNEL_A			=	0,		// A相电压, 用于计算电机A相电流
    MOTOR_ADC_CHANNEL_B			=	1,		// B相电压, 用于计算电机B相电流
    MOTOR_ADC_CHANNEL_C			=	2,		// C相电压, 用于计算电机C相电流
    MOTOR_ADC_CHANNEL_DC		=	3,		// 供给电机的直流总电压, 用于计算电机耗电总电流
    MOTOR_ADC_CHANNEL_TEMP_DRV	=	4,		// 驱动模块PTC电压, 用于计算驱动模块温度
    MOTOR_ADC_CHANNEL_TEMP_A	=	5,		// 电机A相PTC电压, 用于计算电机A相温度
    MOTOR_ADC_CHANNEL_TEMP_B	=	6,		// 电机B相PTC电压, 用于计算电机B相温度
    MOTOR_ADC_CHANNEL_TEMP_C	=	7,		// 电机C相PTC电压, 用于计算电机C相温度
    MOTOR_ADC_CHANNEL_MAX
}Motor_ADC_Channel_e;

typedef struct motor_adc_t
{
    ADC_HandleTypeDef *adc_handle;	// ADC句柄
    uint16_t adc_channel;			// 采集通道
    uint16_t adc_raw_value;			// 采集到的原始数据
    float conv_value;				// 转换后的数据
    float conv_coef;				// 转换系数
    uint8_t is_valid;               // 数据有效性标志
    uint16_t offset;                // 偏移量校准值
}Motor_ADC_Type;

// 全局ADC通道数组
extern Motor_ADC_Type g_motor_adc_channels[MOTOR_ADC_CHANNEL_MAX];

// ADC初始化函数
void motor_adc_init(void);

// 设置ADC通道参数
void motor_adc_set_channel(Motor_ADC_Channel_e channel, ADC_HandleTypeDef *adc_handle, uint16_t adc_channel, float conv_coef);

// 设置ADC偏移量
void motor_adc_set_offset(Motor_ADC_Channel_e channel, uint16_t offset);

// 获取ADC原始值
uint16_t motor_adc_get_raw_value(Motor_ADC_Channel_e channel);

// 获取转换后的值
float motor_adc_get_converted_value(Motor_ADC_Channel_e channel);

// 检查ADC数据有效性
uint8_t motor_adc_is_valid(Motor_ADC_Channel_e channel);

// ADC数据更新回调函数（用于DMA传输完成中断）
void motor_adc_dma_update_callback(ADC_HandleTypeDef *hadc);

void motor_adc_update_all_channels_dma(void);

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // __________MOTOR_ADC_H__________